// 用来获取基本类型
type a = keyof string;
// 获取类型中的key
type b = keyof { name: string; age: number };

function getAttri<T>(obj: T, key: keyof T): T[keyof T] {
  return obj[key];
}
// function getAttri<T, D extends keyof T>(obj: T, key: D): T[D] {
//   return obj[key];
// }
// function getAttri(obj: object, key: string) {
//   return obj[key as keyof typeof obj];
// }
const user = { name: "fasd", age: 13134 };
const val = getAttri(user, "name");
// console.log(val);

type user = { name: string; age: number; get(): void };

// Exclude<T, U> 是一个内置的条件类型，它用于从联合类型 T 中排除那些可以赋值给类型 U 的成员类型，从而得到一个新的联合类型
type FilterObjectProperty<T, U> = {
  [K in keyof T as Exclude<K, U>]: T[K];
};

type HD = FilterObjectProperty<user, "name">;
export default {};
